package main

import (
	"context"
	"fmt"
	"github.com/hashicorp/consul/api"
	"google.golang.org/grpc"
	"learningProject/mytest/consulTest/pb"
	"strconv"
)

func main() {
	// 初始化consul配置
	consulConfig := api.DefaultConfig()

	// 创建consul对象
	consulClient, err := api.NewClient(consulConfig)
	if err != nil {
		fmt.Println("api.NewClient err", err)
		return
	}

	// 从consul上获取健康的服务
	// 返回值：健康的服务的切片
	services, _, err := consulClient.Health().Service("grpc and consul", "grpc", true, nil) // 参数：1、服务名，2、别名（任选一个）3、是否健康检查
	// 此处可以额外添加负载均衡的功能，不用每次都返回0号切片
	target := services[0].Service.Address + ":" + strconv.Itoa(services[0].Service.Port)

	///////// grpc   //////////
	// 连接grpc服务
	grpcConn, err := grpc.Dial(target, grpc.WithInsecure()) // 使用consul提供的地址进行连接
	if err != nil {
		fmt.Println("conn err:", err)
	}
	defer grpcConn.Close()

	// 初始化grpc客户端
	grpcClient := pb.NewHelloClient(grpcConn)

	// 定义对象
	var person pb.Person
	person.Name = "itcast"
	person.Age = 18

	// 调用远程服务
	t, err := grpcClient.SayHello(context.TODO(), &person)
	fmt.Println(t, err)
}
